
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta charset="utf-8" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />

    <title>pyclbr — Python module browser support &#8212; Python 3.9.6 documentation</title>
    <link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/underscore.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <script type="text/javascript" src="../_static/language_data.js"></script>
    
    <script type="text/javascript" src="../_static/sidebar.js"></script>
    
    <link rel="search" type="application/opensearchdescription+xml"
          title="Search within Python 3.9.6 documentation"
          href="../_static/opensearch.xml"/>
    <link rel="author" title="About these documents" href="../about.html" />
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="copyright" title="Copyright" href="../copyright.html" />
    <link rel="next" title="py_compile — Compile Python source files" href="py_compile.html" />
    <link rel="prev" title="tabnanny — Detection of ambiguous indentation" href="tabnanny.html" />
    <link rel="canonical" href="https://docs.python.org/3/library/pyclbr.html" />
    
      
      
    

    
    <style>
      @media only screen {
        table.full-width-table {
            width: 100%;
        }
      }
    </style>

    <link rel="shortcut icon" type="image/png" href="../_static/py.png" />
    
    <script type="text/javascript" src="../_static/copybutton.js"></script>
    
     


  </head><body>
  
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="py_compile.html" title="py_compile — Compile Python source files"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="tabnanny.html" title="tabnanny — Detection of ambiguous indentation"
             accesskey="P">previous</a> |</li>

    <li><img src="../_static/py.png" alt=""
             style="vertical-align: middle; margin-top: -1px"/></li>
    <li><a href="https://www.python.org/">Python</a> &#187;</li>
    

    <li>
      <a href="../index.html">3.9.6 Documentation</a> &#187;
    </li>

          <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
          <li class="nav-item nav-item-2"><a href="language.html" accesskey="U">Python Language Services</a> &#187;</li>
    <li class="right">
        

    <div class="inline-search" style="display: none" role="search">
        <form class="inline-search" action="../search.html" method="get">
          <input placeholder="Quick search" type="text" name="q" />
          <input type="submit" value="Go" />
          <input type="hidden" name="check_keywords" value="yes" />
          <input type="hidden" name="area" value="default" />
        </form>
    </div>
    <script type="text/javascript">$('.inline-search').show(0);</script>
         |
    </li>

      </ul>
    </div>    

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <section id="module-pyclbr">
<span id="pyclbr-python-module-browser-support"></span><h1><a class="reference internal" href="#module-pyclbr" title="pyclbr: Supports information extraction for a Python module browser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">pyclbr</span></code></a> — Python module browser support<a class="headerlink" href="#module-pyclbr" title="Permalink to this headline">¶</a></h1>
<p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.9/Lib/pyclbr.py">Lib/pyclbr.py</a></p>
<hr class="docutils" />
<p>The <a class="reference internal" href="#module-pyclbr" title="pyclbr: Supports information extraction for a Python module browser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">pyclbr</span></code></a> module provides limited information about the
functions, classes, and methods defined in a Python-coded module.  The
information is sufficient to implement a module browser.  The
information is extracted from the Python source code rather than by
importing the module, so this module is safe to use with untrusted code.
This restriction makes it impossible to use this module with modules not
implemented in Python, including all standard and optional extension
modules.</p>
<dl class="function">
<dt id="pyclbr.readmodule">
<code class="sig-prename descclassname">pyclbr.</code><code class="sig-name descname">readmodule</code><span class="sig-paren">(</span><em class="sig-param">module</em>, <em class="sig-param">path=None</em><span class="sig-paren">)</span><a class="headerlink" href="#pyclbr.readmodule" title="Permalink to this definition">¶</a></dt>
<dd><p>Return a dictionary mapping module-level class names to class
descriptors.  If possible, descriptors for imported base classes are
included.  Parameter <em>module</em> is a string with the name of the module
to read; it may be the name of a module within a package.  If given,
<em>path</em> is a sequence of directory paths prepended to <code class="docutils literal notranslate"><span class="pre">sys.path</span></code>,
which is used to locate the module source code.</p>
<p>This function is the original interface and is only kept for back
compatibility.  It returns a filtered version of the following.</p>
</dd></dl>

<dl class="function">
<dt id="pyclbr.readmodule_ex">
<code class="sig-prename descclassname">pyclbr.</code><code class="sig-name descname">readmodule_ex</code><span class="sig-paren">(</span><em class="sig-param">module</em>, <em class="sig-param">path=None</em><span class="sig-paren">)</span><a class="headerlink" href="#pyclbr.readmodule_ex" title="Permalink to this definition">¶</a></dt>
<dd><p>Return a dictionary-based tree containing a function or class
descriptors for each function and class defined in the module with a
<code class="docutils literal notranslate"><span class="pre">def</span></code> or <code class="docutils literal notranslate"><span class="pre">class</span></code> statement.  The returned dictionary maps
module-level function and class names to their descriptors.  Nested
objects are entered into the children dictionary of their parent.  As
with readmodule, <em>module</em> names the module to be read and <em>path</em> is
prepended to sys.path.  If the module being read is a package, the
returned dictionary has a key <code class="docutils literal notranslate"><span class="pre">'__path__'</span></code> whose value is a list
containing the package search path.</p>
</dd></dl>

<div class="versionadded">
<p><span class="versionmodified added">New in version 3.7: </span>Descriptors for nested definitions.  They are accessed through the
new children attribute.  Each has a new parent attribute.</p>
</div>
<p>The descriptors returned by these functions are instances of
Function and Class classes.  Users are not expected to create instances
of these classes.</p>
<section id="function-objects">
<span id="pyclbr-function-objects"></span><h2>Function Objects<a class="headerlink" href="#function-objects" title="Permalink to this headline">¶</a></h2>
<p>Class <code class="xref py py-class docutils literal notranslate"><span class="pre">Function</span></code> instances describe functions defined by def
statements.  They have the following attributes:</p>
<dl class="attribute">
<dt id="pyclbr.Function.file">
<code class="sig-prename descclassname">Function.</code><code class="sig-name descname">file</code><a class="headerlink" href="#pyclbr.Function.file" title="Permalink to this definition">¶</a></dt>
<dd><p>Name of the file in which the function is defined.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Function.module">
<code class="sig-prename descclassname">Function.</code><code class="sig-name descname">module</code><a class="headerlink" href="#pyclbr.Function.module" title="Permalink to this definition">¶</a></dt>
<dd><p>The name of the module defining the function described.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Function.name">
<code class="sig-prename descclassname">Function.</code><code class="sig-name descname">name</code><a class="headerlink" href="#pyclbr.Function.name" title="Permalink to this definition">¶</a></dt>
<dd><p>The name of the function.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Function.lineno">
<code class="sig-prename descclassname">Function.</code><code class="sig-name descname">lineno</code><a class="headerlink" href="#pyclbr.Function.lineno" title="Permalink to this definition">¶</a></dt>
<dd><p>The line number in the file where the definition starts.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Function.parent">
<code class="sig-prename descclassname">Function.</code><code class="sig-name descname">parent</code><a class="headerlink" href="#pyclbr.Function.parent" title="Permalink to this definition">¶</a></dt>
<dd><p>For top-level functions, None.  For nested functions, the parent.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.7.</span></p>
</div>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Function.children">
<code class="sig-prename descclassname">Function.</code><code class="sig-name descname">children</code><a class="headerlink" href="#pyclbr.Function.children" title="Permalink to this definition">¶</a></dt>
<dd><p>A dictionary mapping names to descriptors for nested functions and
classes.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.7.</span></p>
</div>
</dd></dl>

</section>
<section id="class-objects">
<span id="pyclbr-class-objects"></span><h2>Class Objects<a class="headerlink" href="#class-objects" title="Permalink to this headline">¶</a></h2>
<p>Class <code class="xref py py-class docutils literal notranslate"><span class="pre">Class</span></code> instances describe classes defined by class
statements.  They have the same attributes as Functions and two more.</p>
<dl class="attribute">
<dt id="pyclbr.Class.file">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">file</code><a class="headerlink" href="#pyclbr.Class.file" title="Permalink to this definition">¶</a></dt>
<dd><p>Name of the file in which the class is defined.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Class.module">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">module</code><a class="headerlink" href="#pyclbr.Class.module" title="Permalink to this definition">¶</a></dt>
<dd><p>The name of the module defining the class described.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Class.name">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">name</code><a class="headerlink" href="#pyclbr.Class.name" title="Permalink to this definition">¶</a></dt>
<dd><p>The name of the class.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Class.lineno">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">lineno</code><a class="headerlink" href="#pyclbr.Class.lineno" title="Permalink to this definition">¶</a></dt>
<dd><p>The line number in the file where the definition starts.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Class.parent">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">parent</code><a class="headerlink" href="#pyclbr.Class.parent" title="Permalink to this definition">¶</a></dt>
<dd><p>For top-level classes, None.  For nested classes, the parent.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.7.</span></p>
</div>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Class.children">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">children</code><a class="headerlink" href="#pyclbr.Class.children" title="Permalink to this definition">¶</a></dt>
<dd><p>A dictionary mapping names to descriptors for nested functions and
classes.</p>
<div class="versionadded">
<p><span class="versionmodified added">New in version 3.7.</span></p>
</div>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Class.super">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">super</code><a class="headerlink" href="#pyclbr.Class.super" title="Permalink to this definition">¶</a></dt>
<dd><p>A list of <code class="xref py py-class docutils literal notranslate"><span class="pre">Class</span></code> objects which describe the immediate base
classes of the class being described.  Classes which are named as
superclasses but which are not discoverable by <a class="reference internal" href="#pyclbr.readmodule_ex" title="pyclbr.readmodule_ex"><code class="xref py py-func docutils literal notranslate"><span class="pre">readmodule_ex()</span></code></a>
are listed as a string with the class name instead of as
<code class="xref py py-class docutils literal notranslate"><span class="pre">Class</span></code> objects.</p>
</dd></dl>

<dl class="attribute">
<dt id="pyclbr.Class.methods">
<code class="sig-prename descclassname">Class.</code><code class="sig-name descname">methods</code><a class="headerlink" href="#pyclbr.Class.methods" title="Permalink to this definition">¶</a></dt>
<dd><p>A dictionary mapping method names to line numbers.  This can be
derived from the newer children dictionary, but remains for
back-compatibility.</p>
</dd></dl>

</section>
</section>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <h3><a href="../contents.html">Table of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">pyclbr</span></code> — Python module browser support</a><ul>
<li><a class="reference internal" href="#function-objects">Function Objects</a></li>
<li><a class="reference internal" href="#class-objects">Class Objects</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="tabnanny.html"
                        title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">tabnanny</span></code> — Detection of ambiguous indentation</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="py_compile.html"
                        title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">py_compile</span></code> — Compile Python source files</a></p>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../bugs.html">Report a Bug</a></li>
      <li>
        <a href="https://github.com/python/cpython/blob/3.9/Doc/library/pyclbr.rst"
            rel="nofollow">Show Source
        </a>
      </li>
    </ul>
  </div>
        </div>
      </div>
      <div class="clearer"></div>
    </div>  
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="py_compile.html" title="py_compile — Compile Python source files"
             >next</a> |</li>
        <li class="right" >
          <a href="tabnanny.html" title="tabnanny — Detection of ambiguous indentation"
             >previous</a> |</li>

    <li><img src="../_static/py.png" alt=""
             style="vertical-align: middle; margin-top: -1px"/></li>
    <li><a href="https://www.python.org/">Python</a> &#187;</li>
    

    <li>
      <a href="../index.html">3.9.6 Documentation</a> &#187;
    </li>

          <li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> &#187;</li>
          <li class="nav-item nav-item-2"><a href="language.html" >Python Language Services</a> &#187;</li>
    <li class="right">
        

    <div class="inline-search" style="display: none" role="search">
        <form class="inline-search" action="../search.html" method="get">
          <input placeholder="Quick search" type="text" name="q" />
          <input type="submit" value="Go" />
          <input type="hidden" name="check_keywords" value="yes" />
          <input type="hidden" name="area" value="default" />
        </form>
    </div>
    <script type="text/javascript">$('.inline-search').show(0);</script>
         |
    </li>

      </ul>
    </div>  
    <div class="footer">
    &copy; <a href="../copyright.html">Copyright</a> 2001-2021, Python Software Foundation.
    <br />

    The Python Software Foundation is a non-profit corporation.
<a href="https://www.python.org/psf/donations/">Please donate.</a>
<br />
    <br />

    Last updated on Jun 28, 2021.
    <a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
    <br />

    Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 2.3.1.
    </div>

  </body>
</html>